from win32com import client
import os
from config.config import logger
'''
【功能】
用来实现doc与docx互转的一个程序

【特色】
可穿透指定路径下的所有文件，对找到的所有word文档进行操作
并把结果输出到指定路径中


【原理】
在 Windows 操作系统上使用 Python 的 win32com.client 库(允许Python脚本与Windows的COM接口进行交互)
来操作 Microsoft Word 应用程序，以实现 .doc 文件和 .docx 文件之间的转换


【注意事项】
必须在 Windows 系统上运行
电脑里必须有 Microsoft Office 
请确认没有同名文件，否则文件会覆盖
'''


# 在 SaveAs 方法中，第二个参数代表的是 Word 文件的保存格式
# 0: Word 97 - 2003 文档 (.doc)
# 1: Word 97 - 2003 模板 (.dot)
# 12: Word 2007+ 文档 (.docx)
# 16: Word 2007+ 文档 (.docx)

# 转换doc为docx
def doc2docx(word_path_list, save_path):
    word = client.Dispatch("Word.Application")  # 打开word应用程序
    word.Visible = False  # 如果不需要看到 Word 界面，可以将 Visible 设置为 False

    for word_path in word_path_list:
        if word_path.endswith('doc'):
            fn = word_path.split('\\')[-1].replace('.doc','')

            doc = word.Documents.Open(word_path)  # 打开word文件
            doc.SaveAs(save_path + "\\" + fn, 12)  # 另存为后缀为".docx"的文件，其中参数12或16指docx文件
            doc.Close()  # 关闭原来word文件

            logger.info(f"转docx完毕：{fn}")
            print(f"转docx完毕：{fn}")
    word.Quit()


# 转换docx为doc
def docx2doc(word_path_list, save_path):
    word = client.Dispatch("Word.Application")  # 打开word应用程序
    word.Visible = False  # 如果不需要看到 Word 界面，可以将 Visible 设置为 False

    for word_path in word_path_list:
        if word_path.endswith('docx'):
            fn = word_path.split('\\')[-1].replace('.docx','')

            doc = word.Documents.Open(word_path)  # 打开word文件
            doc.SaveAs(save_path + "\\" + fn, 0)  # 另存为后缀为".docx"的文件，其中参数0指doc
            doc.Close()  # 关闭原来word文件

            logger.info(f"转doc完毕：{fn}")
            print(f"转doc完毕：{fn}")
    word.Quit()





